package com.example.houselease.service;

import com.example.houselease.pojo.dto.admin.AdminAddNewDTO;
import com.example.houselease.pojo.dto.admin.AdminLoginDTO;
import com.example.houselease.pojo.dto.admin.AdminUpdateDTO;
import com.example.houselease.pojo.vo.AdminDetailVO;
import com.example.houselease.pojo.vo.AdminListVO;
import com.example.houselease.pojo.vo.RoleDetailVO;

import java.util.List;

/**
 * 管理员 service
 * @author sf
 * @version 0.0.1
 * */
public interface IAdminService {

    /**
     * 管理员登录
     * @param adminLoginDTO 登录数据
     * */
    String login(AdminLoginDTO adminLoginDTO);

    /**
     * 管理员列表
     * @return 数据
     * */
    List<AdminListVO> list();

    /**
     * 修改管理员
     * @param id 管理员id
     * @param adminUpdateDTO 数据
     * */
    void update(Long id, AdminUpdateDTO adminUpdateDTO);

    /**
     * 添加管理员
     * @param adminLoginDTO 管理员数据
     * */
    void addNew(AdminAddNewDTO adminLoginDTO);

    /**
     * 通过管理员id获取角色数据
     * @param id 管理员id
     * */
    List<Long> getRoleByAdminId(Long id);

    /**
     * 通过管理员id，修改其所拥有的角色信息
     * @param id 管理员id
     * @param roleIds 角色id列表
     * */
    void updateAdminRoleByAdminId(Long id, List<Long> roleIds);

    /**
     * 通过id删除管理员数据
     * @param id 管理员id
     * */
    void deleteById(Long id);

    /**
     * 启用管理员
     * @param id 管理员id
     * */
    void enable(Long id);

    /**
     * 禁用管理员
     * @param id 管理员id
     * */
    void disable(Long id);

    /**
     * 管理员详情
     * */
    AdminDetailVO getAdminDetail(Long id);

    /**
     * 重新构建管理员数据缓存
     * */
    void rebuildCache();
}
